package singleton;

/**
 * DCL/双检锁/双重检验锁.
 *
 * 是否 Lazy 初始化：是
 * 是否多线程安全：是
 * 实现难度：较复杂
 *
 * 描述：这种方式采用双锁机制，安全且在多线程情况下能保持高性能。
 * getInstance() 的性能对应用程序很关键。
 *
 */
public class DCL {
    private  volatile static DCL instance = null;

    private DCL(){}

    public static DCL getInstance(){
        if (instance == null) {
            synchronized (DCL.class) {
                if (instance == null) {
                    instance = new DCL();
                }
            }
        }
        return instance;
    }
}
